package com.qianfeng.springmvc.controller;

//
//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖镇楼                  BUG辟易  
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  
//  


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * Created by Jackiechan on 2021/12/24/20:07
 *
 * @author Jackiechan
 * @version 1.0
 * @since 1.0
 */
@RequestMapping("/resp")
@Controller
@SessionAttributes({"sessionattrname","sessionattrage"})//如果向model存放这两个名字的参数,就保存到session域中
public class ResponseController {

    @RequestMapping("/test1")
    public String test1(String name) {
        System.err.println("test1收到了参数" + name);
        //返回结果的第一个方式把请求转发给另外一个,让另外一个负责返回
        //如果我们的方法的返回值是字符串,默认情况就是转发, 转发如果不写/ 默认是相对路径,是相对于当前的请求地址,去掉最后一个,把返回结果拼过去
        //比如此处我们访问的是/resp/test1 我们返回的是test2 那么就会转发到/resp/test2上面
        //如果返回结果是/test2 就意味着转发到 /test2这个路径,不再是相对路径了.所以一定要根据实际情况来判断
        //如果是转发到当前类中的其他请求,可以使用相对路径,如果是转发到其它类中的地址,使用绝对路径
        //转发也可以在前面拼接forward:  什么都不拼接默认就是forward:
        return "forward:test2";
    }



    @RequestMapping("/test2")
    public String test2222(String name) {
        System.err.println("test22222222收到了参数" + name);
        return "";
    }

    @RequestMapping("/test3")
    public String test3(String name) {
        System.err.println("test333333收到了参数" + name);
        //我想要重定向到test4
        // 规则和转发是一样的,如果是相对路径,就不用/开头, 如果是/开头的地址就是重定向到对应的地址
        //比如我们写test4就重定向到/resp/test4, 写/test4就是重定向到/test4
        return "redirect:/test4";
    }

    @RequestMapping("/test4")
    public String test4(String name) {
        System.err.println("test4444444444收到了参数" + name);
        return "";
    }

    @RequestMapping("/result")
    public String result(String name) {
        System.err.println("result收到了参数" + name);
        return "/result.jsp";
    }

    @RequestMapping("/success")
    public String success(String name) {
        System.err.println("success收到了参数" + name);
        return "redirect:/jsp/success.jsp";
    }

    @RequestMapping("/ceshi")
    public String ceshi(String name) {
        System.err.println("ceshi收到了参数" + name);
        return "redirect:/WEB-INF/jsp/ceshi.jsp";
    }
    @RequestMapping("/ceshi1")
    public String ceshi1(String name) {
        System.err.println("ceshi11收到了参数" + name);
        return "/WEB-INF/jsp/ceshi.jsp";
    }


    @RequestMapping("/datarequest")
    public String datarequest(HttpServletRequest request) {
        request.setAttribute("name","mengde");
        request.setAttribute("age",18);
        return "/data.jsp";// request中的数据重定向g过去是取不出来的
    }

    @RequestMapping("/datasession")
    public String datasession(HttpSession session) {
        session.setAttribute("name","sessionde name");
        session.setAttribute("age",180);
        return "/data.jsp";// session的数据重定向可以获取
    }


    @RequestMapping("/datamodel")
    public String datasession(Model model) {
        //Model存放的数据也可以获取出来,像普通获取数据的方式是一样的.model的数据默认是在请求域中,所以重定向的时候是获取不到数据的
        model.addAttribute("name", "model数据");
        model.addAttribute("age", 360);
        return "/data.jsp";// session的数据重定向可以获取
    }

    @RequestMapping("/datamodelredirect")
    public String datamodelredirect(Model model) {
        //Model存放的数据也可以获取出来,像普通获取数据的方式是一样的,因为数据在请求域中,所以jsp无法通过el表达式获取,但是
        //model在重定向的时候会将数据作为参数拼接在地址后面
        //有的人觉得重定向到jsp带着参数怎么获取, 首先可以通过param域来获取,其次重定向是到一个地址,这个地址不一定是jsp,可能是controller
        model.addAttribute("name", "model数据");
        model.addAttribute("age", 360);
        return "redirect:/data.jsp";// session的数据重定向可以获取
    }

    /**
     *
     * @param modelAndView 可以传递,也可以在方法内部自己创建,都可以
     * @return
     */
    @RequestMapping("/datamodelandview")
    public ModelAndView datamodelandview(ModelAndView modelAndView) {

        modelAndView.addObject("name", "王力宏,大娅");//相当于model的操作 tly
        modelAndView.addObject("age", 40);
        modelAndView.setViewName("/data.jsp");//相当于我们直接返回值是字符串的时候写的返回值
        return modelAndView;
    }

    @RequestMapping("/sessionattr")
    public String sessionattr(Model model) {
        model.addAttribute("sessionattrname", "随便写个数据");//
        model.addAttribute("sessionattrage", 240);
        return "redirect:/sessionattr.jsp";// session的数据重定向可以获取
    }


}
